package com.wanmait.happyheating.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo;
import com.wanmait.happyheating.pojo.ComplainsType;
import com.wanmait.happyheating.service.ComplainsTypeService;
import com.wanmait.happyheating.service.ConfigService;
import com.wanmait.happyheating.util.Result;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;


/**
 * 故障类型相关的controller，主要负责管理员对故障类型的CRUD
 * @author 王梓旭 2021-5-17
 */
@RestController
@RequestMapping("/manage")
public class AdminComplainsTypeController {

    @Resource
    private ConfigService configService;

    @Resource
    private ComplainsTypeService complainsTypeService;

    /**
     * @author 王梓旭 2021-5-17
     * 添加投诉条例(投诉类型)
     * @param complainsType 投诉类型
     */
    @PutMapping("addComplainsType")
    public Result addComplainsType(@RequestBody ComplainsType complainsType){
        //保存该投诉分类
        complainsTypeService.save(complainsType);
        return Result.success("添加成功");
    }

    /**
     * @author 王梓旭 2021-5-17
     * 检查用户输入的投诉条例是否重复
     * @param complainsType 管理员正在编辑的要添加的投诉分类
     * @return 输入的内容已经存在，返回的消息为”该类型已存在“，输入的消息不存在，返回的消息为”√“
     */
    @PostMapping("checkComplainsTypeExists")
    public Result checkComplainsTypeExists(@RequestBody ComplainsType complainsType){
        //创建条件构造器
        LambdaQueryWrapper<ComplainsType> queryWrapper = new LambdaQueryWrapper<>();
        //对条件进行赋值
        queryWrapper.eq(ComplainsType::getTitle,complainsType.getTitle());
        ComplainsType exists = complainsTypeService.getOne(queryWrapper);
        if(null != exists){
            return Result.fail("该类型已存在");
        }else{
            return Result.success("√");
        }
    }


    /**
     * @author 王梓旭  2021-5-20
     * 模糊查询使用此方法
     * @return 所有的投诉条例
     */
    @PostMapping("showComplainsType")
    public Result showComplainsType(@RequestBody ComplainsType complainsType, Integer pageNum, Integer pageSize)
    {
        if (pageNum==null){
            pageNum=1;
        }

        if (complainsType.getId()==0&&!("".equals(complainsType.getTitle()))){
            PageInfo<ComplainsType> complainsTypes=complainsTypeService.fuzzyPagingQuery(pageNum,pageSize,complainsType.getTitle());
            return Result.success("查找成功",complainsTypes);
        }
        PageInfo<ComplainsType> complainsTypes=complainsTypeService.findByPage(pageNum,pageSize);
        return Result.success("查找成功",complainsTypes);
    }

    /**
     * @author 王梓旭  2021-5-18
     * 修改投诉条例
     * @param complainsType 已经修改的投诉条例
     */
    @PostMapping("updateComplainsType")
    public Result updateComplainsType(@RequestBody ComplainsType complainsType){
        if (complainsType.getId()!=null)
        {
            boolean flag=complainsTypeService.updateById(complainsType);
            if (flag){
                return Result.success("更新完成");
            }else {
                return Result.error("更新失败");
            }
        }
        else {
            return Result.error("无效的id");
        }

    }

    /**
     * @author 王梓旭  2021-5-18
     * @param id 在网址中的参数即为要删除的对象的ID
     */
    @DeleteMapping("deleteComplainsType{id:\\d+}")
    public Result deleteOne(@PathVariable Integer id){
        System.out.println("id的值为："+id);
        if ( id != null)
        {
            boolean flag=complainsTypeService.removeById(id);
            if (flag){
                return Result.success("删除完成");
            }else {
                return Result.error("删除失败");
            }
        }
        else {
            return Result.error("无效的id");
        }
    }

    /**
     * @author 王梓旭  2021-5-18
     * 批量删除
     * @param complainsTypeIds List集合，里面存放的时要删除的数组
     */
    @DeleteMapping("deleteBatchComplainsTypes")
    public Result deleteBatch(@RequestBody List<Integer> complainsTypeIds){
        complainsTypeService.removeByIds(complainsTypeIds);
        return Result.success("批量删除成功！");
    }

}
